//窗口布局管理
function NW05_bj(fq) {
    this.fq = fq;//nw
    this.nw = fq.fq;
    this.nys_wz = { wz: 'absolute' };
    this.zzbds_shuzi = /^[0-9.]+$/i
}

//对body进行布局.
NW05_bj.prototype.stBJ = function () {
    for (let i = 0; i < 5; i++) {
        this.buju(this.nw.st);
    }
}

/**
 * 对jd内进行布局.调整儿子 
 * @param {对象} nwJD nw封装的节点对象
 */
NW05_bj.prototype.buju = function (nwJD) {
    let _ErziM = nwJD.Jiedian.children;
    let _NWerziM = [];
    let _nwErzi;

    for (let i = 0; i < _ErziM.length; i++) {

        // this.nw.yq.zdy.zx1(_ErziM[i])
        if (_ErziM[i].getAttributeNode('hlbj')) {
            continue;
        }
        switch (_ErziM[i].nodeName) {
            case 'PZ':
                continue;
            case 'DIV':
            case 'IFRAME':
            case 'BUJU':
            case 'BJ':
            case 'NR':
                _nwErzi = this.nw.cj(_ErziM[i]);
                //隐藏的,跳过
                if (_nwErzi.ys.hqNYS('display') == 'none') {
                    continue;
                }
                _NWerziM.push(_nwErzi);
        }
    }

    for (let i = 0; i < _NWerziM.length; i++) {
        _nwErzi = _NWerziM[i];
        this._ngj_tzGK(nwJD, _nwErzi, _NWerziM)

        //针对iframe 和 nr节点，不再进行他们的儿子定位检测
        if (_ErziM[i].nodeName == 'IFRAME' || _ErziM[i].nodeName == 'NR') {
            continue;
        }
        this.buju(_nwErzi);
    }
    if (nwJD)
        this._ngj_ylj_h(_NWerziM)

}

NW05_bj.prototype._ngj_tzGK = function (nwJD, _nwErzi, _ErziM, dw) {
    let fqys = nwJD.ys;
    let erys = _nwErzi.ys;
    let _PZ = {}
    // 表示从父长宽中计算得到=''  
    // 表示写死='xxx'  比如 100px
    // 表示没有=null
    // 表示自动='zd'
    let _zhi_g = this._ngj_hqGKpz(_nwErzi, 'g');
    let _zhi_k = this._ngj_hqGKpz(_nwErzi, 'k');
    if (_zhi_g == '') {
        _PZ.g = this.hqG(fqys, erys, dw);
    } else if (_zhi_g == 'zd') {
        //我的高=父-计算要减去的同列的、写死的高-其他的
        //同列的，固定的【高】
        let _wo_l = _nwErzi.jd.hqSXzhi('l');
        let jian = 0;//要减去的高
        if (_wo_l) {
            // console.log(_nwErzi.Jiedian)
            jian = this._ngj_hqGKzhi_jian(_ErziM, 'l', _wo_l, 'g');//要减去的高。同列兄弟节点中，那些写死的高
            // console.log('要减去的高：'+jian)
        }
        _PZ.g = this.hqG2(fqys, erys, jian, dw)
    } else if (_zhi_g != null) {//直接写死的
        _PZ.g = this.zzbds_shuzi.test(_zhi_g) ? _zhi_g + this.hqDW(erys.hqG_dw(), dw) : _zhi_g;
    }

    if (_zhi_k == '') {
        _PZ.k = this.hqK(fqys, erys, dw);
    } else if (_zhi_k == 'zd') {
        //我的高=父-计算要减去的同列的、写死的高-其他的
        //同列的，固定的【高】
        let _wo_l = _nwErzi.jd.hqSXzhi('h');
        let jian = 0;//要减去的高
        if (_wo_l) {
            jian = this._ngj_hqGKzhi_jian(_ErziM, 'h', _wo_l, 'k');//要减去的高。同列兄弟节点中，那些写死的高
        }
        _PZ.k = this.hqK2(fqys, erys, jian, dw)
    } else if (_zhi_k != null) {//直接写死的
        _PZ.k =
            this.zzbds_shuzi.test(_zhi_k) ? _zhi_k + this.hqDW(erys.hqK_dw(), dw) : _zhi_k;
        // _zhi_k + this.hqDW(erys.hqK_dw(), dw);
    }
    erys.xgNYS(_PZ);
}
//同行的,右连接一起.
NW05_bj.prototype._ngj_ylj_h = function (_ErziM) {
    let hSZ = []//标注了行的节点
    for (let i = 0; i < _ErziM.length; i++) {
        if (_ErziM[i].jd.hqSXzhi('h')) {
            hSZ.push(_ErziM[i])
        }
    }
    let let1 = null;
    let shangyihangKaishi = null;//上一行的开始
    let dyc = true;//第1次
    // [a=1,b=2,c=1 ]
    for (let i = 0; i < hSZ.length; i++) {

        // [a=1,b=2,c=1 ]
        let1 = hSZ[i];  //比如,第2个节点
        if (!let1) {
            continue;
        }
        this._ngj_wz(let1)
        //在兄弟节点中,第1行的第1个,锁定为0,0
        if (dyc) {
            let1.ys.xy_zsj(0, 0)
            dyc = false;
        }

        if (shangyihangKaishi) {
            shangyihangKaishi.ys.xy_xlj(let1)
        }
        shangyihangKaishi = let1;

        for (let j = 0; j < hSZ.length; j++) {
            if (j == i || !hSZ[j]) {
                continue;//自己不能与自己连接
            }
            if (let1.jd.hqSXzhi('h') == hSZ[j].jd.hqSXzhi('h')) {
                this._ngj_wz(hSZ[j])
                let1.ys.xy_ylj(hSZ[j]);
                let1 = hSZ[j];
                hSZ[j] = null;
            }
        }
    }
}
// 如果没有指定 定位模式,统一设计绝对定位
NW05_bj.prototype._ngj_wz = function (nwDX) {
    if (!nwDX.ys.hqNYS('position')) {
        nwDX.ys.xgNYS(this.nys_wz)
    }
}

//要减去的高宽值
//从兄弟节点中，找到其他sxMing属性的节点。然后，计算 g或k的写死的宽，或高。
NW05_bj.prototype._ngj_hqGKzhi_jian = function (_ErziM, sxMing, sxZhi, gk) {
    let _nwErzi;
    let leiji = 0;//累计
    let linshi;//临时。
    let woys;
    for (let i = 0; i < _ErziM.length; i++) {
        _nwErzi = _ErziM[i];
        woys = _nwErzi.ys;
        // if (_nwErzi.ys.pdYC()) {
        //     continue;
        // }
        if (_nwErzi.jd.hqSXzhi(sxMing) == sxZhi) {//表示同个行或列
            linshi = this._ngj_hqGKpz(_nwErzi, gk);
            // console.log('gk值=' + linshi)
            //如果是写死长度的（不是自动分析的，不是基于父计算出来的，存在gk配置的）
            if (linshi != 'zd' && linshi != '' && linshi != null) {
                leiji += parseFloat(linshi);
                if (gk == 'g') {
                    leiji += woys.hqWBJ_s() + woys.hqWBJ_x() + woys.hqBK_s() + woys.hqBK_x()
                } else {
                    leiji += woys.hqWBJ_z() + woys.hqWBJ_y() + woys.hqBK_z() + woys.hqBK_y()
                }
            }
        }
    }
    return leiji;
}

// 从 属性 gk 或 g 或 k 中，取得我们要的 g或k值
// 值一般为： 
// 表示从父长宽中计算得到=''  
// 表示写死='xxx'  比如 100px
// 表示没有=null
// 表示自动='zd'
NW05_bj.prototype._ngj_hqGKpz = function (nwJD, gk) {
    let _zhi;
    if ((_zhi = nwJD.jd.hqSXzhi('gk')) != null) {
        return ''//表示 100父亲宽或高
    }
    if ((_zhi = nwJD.jd.hqSXzhi(gk)) != null) {
        return _zhi;
    }
    return null;
}


NW05_bj.prototype.hqG = function (fqys, erys, dw) {
    dw = this.hqDW(erys.hqG_dw(), dw);
    return fqys.hqG() - erys.hqWBJ_s() - erys.hqWBJ_x() - erys.hqBK_s() - erys.hqBK_x() - erys.hqNBJ_s() - erys.hqNBJ_x() + dw;
}

NW05_bj.prototype.hqG2 = function (fqys, erys, jian, dw) {
    dw = this.hqDW(erys.hqG_dw(), dw);
    return fqys.hqG() - jian - erys.hqWBJ_s() - erys.hqWBJ_x() - erys.hqBK_s() - erys.hqBK_x() - erys.hqNBJ_s() - erys.hqNBJ_x() + dw;
}

NW05_bj.prototype.hqK = function (fqys, erys, dw) {
    dw = this.hqDW(erys.hqK_dw(), dw);
    return fqys.hqK() - erys.hqWBJ_z() - erys.hqWBJ_y() - erys.hqBK_z() - erys.hqBK_y() - erys.hqNBJ_z() - erys.hqNBJ_y() + dw;
}


NW05_bj.prototype.hqK2 = function (fqys, erys, jian, dw) {
    dw = this.hqDW(erys.hqK_dw(), dw);
    return fqys.hqK() - jian - erys.hqWBJ_z() - erys.hqWBJ_y() - erys.hqBK_z() - erys.hqBK_y() - erys.hqNBJ_z() - erys.hqNBJ_y() + dw;
}


NW05_bj.prototype.hqDW = function (_zzDW, dw) {
    if (dw) {
        return dw;
    } else {
        return _zzDW ? _zzDW : 'px';
    }
}